pigeonhole principle discrete mathematics